package top.dingwen.io.treasure.api.auth;


import top.dingwen.io.treasure.api.base.constant.ApiConstant;

import java.util.List;
import java.util.Map;

/**
 * 动态权限服务
 *
 * @author dingwen
 * @since 2024/4/22 11:30
 */
@SuppressWarnings(ApiConstant.ALL)
public interface IDynamicAttributeService {
    /**
     * 加载资源权限信息 </br>
     * <p>
     *     此接口调用频繁,需要走多级缓存
     * </p>
     * <p>
     *     key: 接口资源地址: {请求地址}_{请求方式}
     *     value: 权限信息: 包括角色限制或者权限限制
     * </p>
     *
     * @return 资源权限信息
     */
    Map<String, List<String>> loadSourceAttributes();

    /**
     * 加载资源权限信息,最终调用的还是
     * {@code Map<String, List<String>> loadSourceAttributes()}
     *
     * @param requestUri  请求地址
     * @param requestMethod 请求方式
     * @return {@link List}<{@link String}>
     */
    List<String> loadSourceAttributes(String requestUri,String requestMethod);

    /**
     * 构建资源key
     *
     * @param requestUri  请求地址
     * @param requestMethod 请求方式
     * @return {@link String}
     */
    String buildSourceKey(String requestUri,String requestMethod);

    /**
     * 根据当前过滤器对象获取权限判断策略 </br>
     * <p>
     *      此接口调用频繁,需要走多级缓存
     * </p>
     *
     * @param requestUri  请求地址
     * @param requestMethod 请求方式
     * @return 策略实现SpringBean名称
     */
    String getAuthorityStrategyBeanName(String requestUri,String requestMethod);
}
